<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page import="util.*"%>
<%@page import="entidades.*"%>
<%@page import="java.util.List"%>
<%@page import="java.util.Date"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.Set"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.text.SimpleDateFormat"%>

<html>
<head>

<%@ include file="jspf/head.jspf" %>

<script type="text/javascript" src="js/sp/proporciones-newlong.js"></script>
<style type="text/css">
	.formato_hover
		{ background-color: #40d040; }
	.formato_destacado
		{ background-color: #60f060; }
	
	#form_ordenamiento ul.formatos li
		{
		margin: 2px;
		padding: 2px;
		cursor:n-resize;
		list-style-type: none;
		border: 1px solid #00a000;
		background-color: #d0ffd0;
		font-weight: normal;
		}
		
	#div_ayuda
		{
		padding: 10px;
		}
		
	#div_ayuda h2
		{
		margin-top: 10px;
		margin-bottom: 10px;		
		}
		
	#div_ayuda p
		{
		text-indent: 20px;
		margin-bottom: 7px;
		text-align: justify;
		}
	
	#div_ayuda div.ejemplo
		{
		padding: 10px;
		margin: 20px 20px;
		font-style: italic;
		border: 1px solid #a0a0a0;
		}

	#div_ayuda div.ejemplo li
		{
		margin-left: 40px;
		}
		
	#div_ayuda div.ejemplo h3
		{
		margin-top: 8px;
		margin-bottom: 8px;
		text-align: left;
		}
</style>

</head>
<body>

<%@ include file="jspf/header.jspf" %>

<div id="div_resultados">

<%
// Obtengo la lista de formatos y de newlongs.
List<Formato> formatos = Formato.listar();
List<Newlong> newlongs = Newlong.listar();
Date hoy = new Date();
int fxc = 4;

// Verifico si debo guardar el orden o las cantidades.
String accion = (request.getParameter("accion")!=null)? request.getParameter("accion") : "";

if(accion.compareTo("balancear") == 0)
	{
	for(int i=0; i<newlongs.size(); i++)
		{
		List<FormatosPorNewlong> fxn = FormatosPorNewlong.listar(newlongs.get(i).getId());
		for(int j=0; j<fxn.size(); j++)
			{
			FormatosPorNewlong f = fxn.get(j);
			long bolsas = Util.parseLong(request.getParameter("bolsas_"+f.getNewlongId()+"_"+f.getFormatoId()));
			String prop = request.getParameter("proporcion_"+f.getNewlongId()+"_"+f.getFormatoId());
			if(prop != null && prop.length() > 0)
				{ FormatosPorNewlong.cambiarProporcionYCantidad(f.getNewlongId(), f.getFormatoId(), prop, bolsas+""); }
			}
		}
	}

if(accion.compareTo("ordenar") == 0)
	{
	for(int i=0; i<newlongs.size(); i++)
		{
		String datos = request.getParameter("formatos_" + newlongs.get(i).getId());
		if(datos != null && datos.length() > 0)
			{
			String lista[] = datos.split(",");
			for(int l=0; l<lista.length; l++)
				{
				String item[] = lista[l].split(":");
				if(item.length > 1) { FormatosPorNewlong.cambiarOrden(newlongs.get(i).getId(), item[0], item[1]); }
				}
			}
		}
	}
if (accion.compareTo("generar") == 0){
    for(int i=0; i<newlongs.size(); i++)
		{
		List<CicloNewlong> ciclos = CicloNewlong.getCicloNewlongByNewlong(newlongs.get(i).getId());
                List<FormatosPorNewlong> fxn = FormatosPorNewlong.listar(newlongs.get(i).getId());
		for(int j=0; j<fxn.size(); j++)
			{
			FormatosPorNewlong f = fxn.get(j);
			long bolsas = Util.parseLong(request.getParameter("bolsas_"+f.getNewlongId()+"_"+f.getFormatoId()));
			String prop = request.getParameter("proporcion_"+f.getNewlongId()+"_"+f.getFormatoId());
			if(prop != null && prop.length() > 0)
				{
                                FormatosPorNewlong.cambiarProporcionYCantidad(f.getNewlongId(), f.getFormatoId(), prop, bolsas+"");
                                }
                        }
                List<FormatosPorNewlong> forms = FormatosPorNewlong.listar(newlongs.get(i).getId());
                for (FormatosPorNewlong f : forms){
                        for (CicloNewlong cn : ciclos){
                              //EtapaNewlong.calcularFechasYCantidades(f.getNewlongId(), cn.getFechaHoraInicio(), cn.getFechaHoraFin(), false);
                            long totalCiclo = cn.getCantidadTotal();
                            EtapaNewlong etapa = EtapaNewlong.getEtapaByCicloYFormato(cn.getId(), f.getFormatoId());
                             if (etapa != null){
                                   etapa.recalcular(cn.getNewlongId(), cn.getFechaHoraInicio(), cn.getFechaHoraFin(), f);
                             }else{
                                   etapa = new EtapaNewlong();
                                   etapa.setFormatoId(f.getFormatoId());
                                   etapa.setCicloId(cn.getId());
                                   etapa.recalcular(cn.getNewlongId(), cn.getFechaHoraInicio(), cn.getFechaHoraFin(), f);
                            }
                            long totalEtapaCiclo = cn.getCantidadTotal();
                            if (totalEtapaCiclo != totalCiclo){
                                if (totalEtapaCiclo < totalCiclo){
                                    long diferencia = totalCiclo - totalEtapaCiclo;
                                    EtapaNewlong e = EtapaNewlong.getEtapaByCicloYFormato(cn.getId(), f.getFormatoId());
                                    e.setCantidad(e.getCantidad() + diferencia);
                                    e.guardar();
                                   }else{
                                    long diferencia = totalEtapaCiclo - totalCiclo;
                                    EtapaNewlong e = EtapaNewlong.getEtapaByCicloYFormato(cn.getId(), f.getFormatoId());
                                    e.setCantidad(e.getCantidad() - diferencia);
                                    e.guardar();
                                   }
                              }
                         }
		  }

                 
           }
      }
%>




<br/>

<h1>Balanceo de carga Newlong</h1>

<br/>




<!-- Tabla con los filtros para obtener la estimacion de demanda -->
<div id="div_filtros">

<form action="" method="get" id="form_filtros">
	<center><table class="formulario">
		<tr><td><div class="intro">Seleccione el período en el que desea <br/>consultar la composición de la demanda.</div></td></tr>
		<tr>
			<td align="center">
				<input type="text" name="f-fecha1" class="fecha" size="11" value="<%= Util.format(new Date(hoy.getTime() - 31536000000L), "dd/MM/yyyy") %>"/>
				y
				<input type="text" name="f-fecha2" class="fecha" size="11" value="<%= Util.format(hoy, "dd/MM/yyyy") %>"/>
			</td>
		</tr>
		<tr><td align="right"><button name="buscar"><img src="icon/find.png" alt="" title="Buscar"/> <span>Buscar</span></button></td></tr>
	</table></center>
</form>

<br/>
			
</div>





<!-- Tabla con la lista de Newlong para balancear -->

<form method="post" action="" accept-charset="utf-8" id="form_proporciones">
<input type="hidden" name="accion" value="balancear"/>	
<center><table>
		<tr valign="top">
	<% {
	// Obtengo la lista de todas las proporciones y la muestro en una tabla
	for(int i=0; i<newlongs.size(); i++)
		{
		List<FormatosPorNewlong> formatosXnewlong = FormatosPorNewlong.listar(newlongs.get(i).getId());
		%>
			<td class="subtitulo">
				<table class="resultados">
					<tr class="titulo">
						<td colspan="2">
							Newlong <%= newlongs.get(i).getId() %>
							<input type="hidden" class="capacidad" name="capacidad_<%= newlongs.get(i).getId() %>" value="<%= newlongs.get(i).getCapacidad()*30/1000 %>"/>
						</td>
					</tr>
					<tr class="subtitulo">
						<td>Formato</td>
						<td>Bolsas</td>
					</tr>
		<%
		for(int j=0; j<formatosXnewlong.size(); j++)
			{ 
			FormatosPorNewlong dpn = formatosXnewlong.get(j);
			%>
					<tr class="formato_hl" data-formatoId="<%= dpn.getFormato().getId() %>">
						<td style="font-weight: normal;"><%= dpn.getFormato().getDescriptor() %></td>
						<td>
							<input type="hidden" class="proporcion"
								   data-formatoId="<%= dpn.getFormatoId() %>" 
								   data-newlongId="<%= newlongs.get(i).getId() %>" 
								   name="proporcion_<%= newlongs.get(i).getId() %>_<%= dpn.getFormatoId() %>"
								   value="" />
							<input type="text" class="bolsas" size="6" style="text-align:right;"
								   data-formatoId="<%= dpn.getFormatoId() %>" 
								   data-newlongId="<%= newlongs.get(i).getId() %>" 
								   name="bolsas_<%= newlongs.get(i).getId() %>_<%= dpn.getFormatoId() %>"
								   value="<%= dpn.getCantidad() %>" />
						</td>
					</tr>
			<% } %>
					<tr>
						<td>Carga</td>
						<td><input type="text" size="6" readonly="readonly" class="carga readonly"
								   data-newlongId="<%= newlongs.get(i).getId() %>"
								   style="text-align:center; font-weight:bold;"
								   name="carga_<%= newlongs.get(i).getId() %>" /></td>
					</tr>
				</table>
			</td>
		<% }
	} %>
		</tr>
</table></center>	
<br/>
</form>

		


<!-- Tabla con la lista de Newlongs para ordenar -->

<form method="post" action="" accept-charset="utf-8" id="form_ordenamiento">
<input type="hidden" name="accion" value="ordenar"/>
<center>
<table>
	<tr valign="top">
	<% {
	// Obtengo la lista de todos los formatos y los muestro en una tabla
	for(int i=0; i<newlongs.size(); i++)
		{
		List<FormatosPorNewlong> formatosXnewlong = FormatosPorNewlong.listar(newlongs.get(i).getId(), true);
		%>
		<td class="subtitulo">
			<table class="resultados">
				<tr class="titulo">
					<td><%= newlongs.get(i).getDescripcion() %></td>
				</tr>
				<tr>
					<td>
						<input type="hidden" name="formatos_<%= newlongs.get(i).getId() %>" value=""/>
						<ul class="formatos"
							data-newlongId="<%= newlongs.get(i).getId() %>">
						
						<% for(int j=0; j<formatosXnewlong.size(); j++) { %>
							<li class="formato"
								data-formatoId="<%= formatosXnewlong.get(j).getFormatoId() %>">
								<%= formatosXnewlong.get(j).getFormato() %>
							</li>
						<% } %>
						
						</ul>
					</td>
				</tr>
			</table>
		</td>
		 <% }
	} %>
	</tr>
</table>
</center>
</form>



		
		
<!-- Tabla con la composicion de la demanda -->
<form method="post" action="" accept-charset="utf-8" id="form_formatos">
<center><table class="resultados">
		<tr class="titulo">
			<td colspan="<%= fxc*3 %>">Composición de la demanda</td>
		<tr>
		<tr class="subtitulo">
			<% { for(int i=0; i<fxc; i++) { %>
			<td>Formato</td>
			<td>Bolsas</td>
			<% } } %>
		</tr>
<% {
// Calculo la cantidad de filas.
int n = formatos.size()/fxc;
if(formatos.size()%fxc != 0) n++;

// Imprimo las filas.
for(int i=0; i<n; i++)
	{
	%><tr><%
	int k = 0;
	while(k < fxc)
		{
		int pos = i + k*n;
		if(pos < formatos.size())
			{ %>
			<td class="formato_hl" data-formatoId="<%= formatos.get(pos).getId() %>">
				<%= formatos.get(pos).getDescriptor() %>
			</td>
			<td class="formato_hl" data-formatoId="<%= formatos.get(pos).getId() %>">
				<input type="text" size="4"
					   class="composicion"
					   name="formato_<%= formatos.get(pos).getId() %>"
					   data-formatoId="<%= formatos.get(pos).getId() %>"
					   value="" />
			</td>
			<% }
		else
			{%><td></td><td></td><%}
		k++;
		}
	%></tr><%
	}
} %>
</table></center>
</form>








<!-- Botones para realizar operaciones de alta, cambiar la vista y consultar la ayuda -->
<br/>
<form method="post" action="" accept-charset="utf-8" id="form_botones"><center>
        <% if( Sesiones.tienePermiso(session, "proporciones_newlong", "write") || true) { %>
        <button class="guardar" name="guardar_generar"><img src="icon/hourglass_add.png" alt="" title="Generar ciclos"/> <span>Generar Ciclos</span></button>
        <% } %>
        <button class="vista" name="estimar"><img src="icon/clock_history.png" alt="" title="Estimar"/> <span>Estimar</span></button>
	<button class="vista" name="balancear"><img src="icon/balance.png" alt="" title="Balancear"/> <span>Balancear</span></button>
	<button class="vista" name="ordenar"><img src="icon/order.png" alt="" title="Ordenar"/> <span>Ordenar</span></button>
	<% if( Sesiones.tienePermiso(session, "proporciones_newlong", "write") || true) { %>
	<button class="guardar" name="guardar_balancear"><img src="icon/save.png" alt="" title="Guardar"/> <span>Guardar</span></button>
	<button class="guardar" name="guardar_ordenar"><img src="icon/save.png" alt="" title="Guardar"/> <span>Guardar</span></button>
	<% } %>
	<button name="ayuda"><img src="icon/help.png" alt="" title="Ayuda"/> <span>Ayuda</span></button>
</center></form>

</div>

	

<!-- Ayuda -->
<div id="div_ayuda" title="Ayuda de la sección 'Balanceo de carga Newlong'">

	<h2>Estimación de la demanda</h2>
	
	<p>En la sección <em>Estimación de la demanda</em> (la sección que se muestra por defecto al abrir
	esta página y a la cual puede accederse a través del botón "Estimar") se puede consultar la
	demanda de cada formato en un período de tiempo determinado.</p>
	<p>Al seleccionar las fechas deseadas y presionar el botón "Buscar" se consultará, en la base
	de datos, las órdenes de trabajo confeccionadas en ese período, se calculará la cantidad de bolsas 
	de cada formato y se los pondrá en la columna "Bolsas" de la tabla ubicada debajo del formulario
	de búsqueda.</p>
	<p>La demanda de cada formato se expresa en miles de bolsas por mes.</p>
	
	<div style="text-align: center;"><img src="img/proporciones_ayuda_1.png" alt=""/></div>
	
	<h2>Balanceo de carga</h2>
	
	<p>En la sección <em>Balanceo de carga</em> (a la cual se puede acceder presionando el botón
	"Balancear") se puede distribuir las bolsas de cada formato en las diferentes confeccionadores 
	Newlong. Abajo de cada Newlong se muestra la carga de trabajo que representa, para esa Newlong, 
	las bolsas asignadas.</p>
	
	<div style="text-align: center;"><img src="img/proporciones_ayuda_2.png" alt=""/></div>

	<p>La importancia de realizar esta distribución es que dichos datos son utilizados para realizar
	la estimación de las fechas de confección de las órdenes de trabajo ingresadas a la base de datos.</p>
	<p>Estimar las fechas de confección no es una tarea trivial, ya que las órdenes de trabajo
	suelen ser reordenadas a fin de que las órdenes del mismo formato se confeccionen juntas y, por lo
	general, uno no sabe de antemano cuantas órdenes de cada formato se van a tener que confeccionar.
	Sin embargo, al realizar esta distribución, se está definiendo cuantas órdenes de cada formato
	se van a confeccionar, lo que permite estimar las fechas de confección con más exactitud.</p>	
	<p>Al presionar el botón "Guardar", se ingresarán estos valores en la base de datos, para luego
	ser utilizados en la estimación de las fechas de confección.</p>
		
	<h2>Orden de formatos</h2>
	
	<p>En la sección <em>Orden de formatos</em> (a la cual puede accederse mediante el botón "Ordenar")
	se puede definir en que orden serán impresos los diferentes formatos de cada Newlong). Este orden
	se utiliza principalmente para la estimación de las fechas de confección, ya que, en la fase de 
	planificación de la confección, dicho orden puede alterarse.</p>
	<p>Al presionar el botón "Guardar", se ingresarán estos valores en la base de datos, para luego
	ser utilizados en la estimación de las fechas de confección.</p>
		
	<div style="text-align: center;"><img src="img/proporciones_ayuda_3.png" alt=""/></div>

	<div style="text-align: right;">
		<button name="cerrar_ayuda"><img src="icon/stop.png" alt="" title="Cerrar"/> <span>Cerrar</span></button>
	</div>
</div>
	
<%@ include file="jspf/footer.jspf" %>

</body>
</html>
